* Reusing factories across different views is allowed, but very uncommon.
*/
-struct _GtkListItemFactory
-{
- GObject parent_instance;
-
- GtkListItemSetupFunc setup_func;
- GtkListItemBindFunc bind_func;
- gpointer user_data;
- GDestroyNotify user_destroy;
-};
-
-struct _GtkListItemFactoryClass
-{
- GObjectClass parent_class;
-};
-
G_DEFINE_TYPE (GtkListItemFactory, gtk_list_item_factory, G_TYPE_OBJECT)
static void
void
gtk_list_item_factory_setup (GtkListItemFactory *self,
- GtkListItem *list_item)
+ GtkListItem *list_item)
{
g_return_if_fail (GTK_IS_LIST_ITEM_FACTORY (self));
g_object_thaw_notify (G_OBJECT (list_item));
}
+void
+gtk_list_item_factory_rebind (GtkListItemFactory *self,
+ GtkListItem *list_item,
+ guint position,
+ gpointer item,
+ gboolean selected)
+{
+ g_return_if_fail (GTK_IS_LIST_ITEM_FACTORY (self));
+ g_return_if_fail (GTK_IS_LIST_ITEM (list_item));
+
+ g_object_freeze_notify (G_OBJECT (list_item));
+
+ gtk_list_item_set_item (list_item, item);
+ gtk_list_item_set_position (list_item, position);
+ gtk_list_item_set_selected (list_item, selected);
+
+ if (self->bind_func)
+ self->bind_func (list_item, self->user_data);
+
+ g_object_thaw_notify (G_OBJECT (list_item));
+}
+
void
gtk_list_item_factory_update (GtkListItemFactory *self,
GtkListItem *list_item,
g_object_thaw_notify (G_OBJECT (list_item));
}
+
+void
+gtk_list_item_factory_teardown (GtkListItemFactory *self,
+ GtkListItem *list_item)
+{
+ g_return_if_fail (GTK_IS_LIST_ITEM_FACTORY (self));
+
+ gtk_list_item_set_child (list_item, NULL);
+
+ gtk_list_item_set_selectable (list_item, TRUE);
+}
+
typedef struct _GtkListItemFactory GtkListItemFactory;
typedef struct _GtkListItemFactoryClass GtkListItemFactoryClass;
+struct _GtkListItemFactory
+{
+ GObject parent_instance;
+
+ GtkListItemSetupFunc setup_func;
+ GtkListItemBindFunc bind_func;
+ gpointer user_data;
+ GDestroyNotify user_destroy;
+};
+
+struct _GtkListItemFactoryClass
+{
+ GObjectClass parent_class;
+};
+
GType gtk_list_item_factory_get_type (void) G_GNUC_CONST;
GtkListItemFactory * gtk_list_item_factory_new (GtkListItemSetupFunc setup_func,
void gtk_list_item_factory_setup (GtkListItemFactory *self,
GtkListItem *list_item);
+void gtk_list_item_factory_teardown (GtkListItemFactory *self,
+ GtkListItem *list_item);
void gtk_list_item_factory_bind (GtkListItemFactory *self,
GtkListItem *list_item,
guint position,
gpointer item,
gboolean selected);
+void gtk_list_item_factory_rebind (GtkListItemFactory *self,
+ GtkListItem *list_item,
+ guint position,
+ gpointer item,
+ gboolean selected);
void gtk_list_item_factory_update (GtkListItemFactory *self,
GtkListItem *list_item,
guint position,
item = g_list_model_get_item (G_LIST_MODEL (self->model), position);
selected = gtk_selection_model_is_selected (self->model, position);
- gtk_list_item_factory_bind (self->factory, GTK_LIST_ITEM (list_item), position, item, selected);
+ gtk_list_item_factory_rebind (self->factory, GTK_LIST_ITEM (list_item), position, item, selected);
gtk_widget_insert_after (list_item, _gtk_widget_get_parent (list_item), prev_sibling);
g_object_unref (item);
}
}
gtk_list_item_factory_unbind (self->factory, GTK_LIST_ITEM (item));
+ gtk_list_item_factory_teardown (self->factory, GTK_LIST_ITEM (item));
gtk_widget_unparent (item);
}